package com.example.c94s3plyhyfc.web;

import com.example.c94s3plyhyfc.bean.Bbs;
import com.example.c94s3plyhyfc.bean.Result;
import com.example.c94s3plyhyfc.biz.BbsBiz;
import com.example.c94s3plyhyfc.biz.BizException;
import com.example.c94s3plyhyfc.mapper.BbsMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping("bbs")
public class BbsController {

    @Resource
    BbsMapper bm;

    @Resource
    BbsBiz bb;

    @GetMapping("query")
    public PageInfo query(Bbs bbs,
                           @RequestParam(defaultValue = "1") int page,
                           @RequestParam(defaultValue = "20") int size) {
        // 设值分页查询
        PageHelper.startPage(page, size, true);
        // selectByObj 返回的List会扩展 分页的属性
        List<Bbs> list = bm.selectByObj(bbs);
        PageInfo pi = new PageInfo(list);
        return pi;
    }

    @GetMapping("/")
    public ModelAndView toBbs( ModelAndView mav){
        // ModelAndView 数据模型和视图
        // 设值跳转的视图名, 先在没有视图
        //mav.setViewName("视图名: user.html ==> user");
        // redirect 表示响应重定向
        mav.setViewName("redirect:/bbs.html");
        return mav;
    }

    @RequestMapping("save")
    public Result save(@Valid Bbs bbs, Errors errors) throws BizException {
        bb.save(bbs, errors);
        return new Result(1, "添加公告成功!", null);
    }

    /**
     * SpringMVC 异常拦截机制
     * 1. 在控制器内用 ExceptionHander 注解, 对当前控制器方法的异常进行统一处理
     * 2. 单独的异常处理类 + ExceptionHander 注解
     * 3. 异常处理接口, 但实现接口(有侵入性) ==> 有悖于尽量使用POJO的原则
     */



}
